<?php

/**
 * OfertasController
 * 
 * @package Sgit 
 * @author Juan Manuel Martinez Carrillo
 * @copyright Juan Manuel Martinez Carrillo
 * @version 2012
 * @access public
 * @revision 17/02/2012 9:06:
 * 
 */


/**
 * 
 * SuperUser tiene acceso a todo,
 * Solo los usuarios con acceso tiene activo el enlace (grupo acceso, superuser,prl,gma)
 * 
 * 
 */


class OfertasController extends Sgit_Controller_Action
{
    
    
    protected $_main_model = 'Ofertas';
    protected $_main_form = 'Ofertas';
    
    protected $_esSuperUser=null;
    
    function createAction()
    {
        $this->_helper->layout->disableLayout();$this->_helper->viewRenderer->setNoRender(TRUE);
        
        $rows = $this->_model->default->getOfertas();
        $m = new Application_Model_UserOferta();
        
        $u = new Application_Model_Usuario();
        
        $users=$u->getCol('id',array('estado=?'=>1));



        foreach($rows as $v)
        {
            $id=$v['id'];
            
            $m->deleteRow(array('id_oferta=?'=>$id));
    
            $permisos=unserialize($v['accesos']);
            $permisos=array_unique($permisos);
    
    
            foreach($permisos as $v)
            {
                $v=(int)$v;

                if(in_array($v,$users))
                {
                    $data['id_user']=$v;
                    $data['id_oferta']=$id;   
                    $m->insertRow($data);
                }
            }
        }
    }
    
    function _begin()
    {
        $this->setParam('estado', 'Abierta');
        $this->_element->OfertasAreas = new Sgit_Form_Element_Select_Xml('OfertasAreas');
        $this->_element->OfertasEstado = new Sgit_Form_Element_Select_Xml('OfertasEstado');
        
        $this->_loadModel('Facilitie');
        $this->_loadModel('UserOferta');
        

        
        $facility=$this->_model->Facilitie->GetAssoc('id_zona','id_usuario');
        
        //barcelona
        $acceso_predefinido[1][]=$facility[1];

        //Lisboa
        $acceso_predefinido[2][]=$facility[2];

        //M1
        $acceso_predefinido[3][]=$facility[3];
        $acceso_predefinido[3][]=29;//JAP
        $acceso_predefinido[3][]=41;//JZA
        $acceso_predefinido[3][]=70;//LAOL

        //M2
        $acceso_predefinido[4][]=$facility[4];
        $acceso_predefinido[4][]=29;//JAP
        $acceso_predefinido[4][]=41;//JZA
        $acceso_predefinido[4][]=70;//LAOL

        //Sevilla
        $acceso_predefinido[6][]=$facility[6];

        //preventa
        $acceso_area_oferta[1][]=100;//Javier campo
        $acceso_area_oferta[1][]=118;//Piscione
        $acceso_area_oferta[1][]=109;//Marta
        $acceso_area_oferta[1][]=32;//MAM
        $acceso_area_oferta[1][]=34;//SHO
        $acceso_area_oferta[1][]=82;//RCC
        $acceso_area_oferta[1][]=99;//Rai
        
        //sectores
        $acceso_area_oferta[2][]=32;//MAM
        $acceso_area_oferta[2][]=34;//SHO
        $acceso_area_oferta[2][]=82;//RCC
        $acceso_area_oferta[2][]=99;//Rai

        //green
        $acceso_area_oferta[3][]=195;//diaz mayorga
        $acceso_area_oferta[3][]=32;//MAM
        $acceso_area_oferta[3][]=34;//SHO
        $acceso_area_oferta[3][]=82;//RCC
        
        
        $this->view->acceso_predefinido=$acceso_predefinido;
        $this->view->acceso_area_oferta=$acceso_area_oferta;
        
        
        
        $validatorsup = new Sgit_Validate_isSuperuser();
        $this->_esSuperUser=$validatorsup->isValid();
        
        
  
    }
    
    
    protected function _rows()
    {
        //predefinir valores de filtros

        $filtros = new Sgit_Form_Filtros();
        
        $filtros->addFormSelect(new Sgit_Form_Element_Select_Usuarios('id_usuario', array('label' => "Responsable"), null, array('estado=?' => 1)));
        $filtros->addFormSelect(new Sgit_Form_Element_Select_Usuarios('acceso', array('label' => "Tiene acceso:"), null, array('estado=?' => 1)));
        $filtros->addFormSelect(new Sgit_Form_Element_Select_Datacenter('id_zona'));
        $filtros->addFormSelect($this->_element->OfertasEstado);
        $filtros->addFormSelect($this->_element->OfertasAreas);
        $values = $this->_getFiltrosValues($filtros);
        //$filtros->addPdf();
        //$filtros->addExcel();
        $filtros->myRender();
        $rows = $this->_model->default->getOfertas($values);
        
 

        $max_level=0;
        foreach($rows as $v){
            $max_level= ($v['level'] > $max_level) ? $v['level'] : $max_level;
        }
        
        $this->_max_level=$max_level;

        return $this->_prepareRowsToTr($rows);
    }


    public function indexAction()
    {
        $rows= $this->_rows();
        $this->view->rows =$rows;
        $campos_suma=array('superficie','potencia','coste','venta');
        $this->view->suma = Sgit_Util_Suma::run($rows,$campos_suma);

    }


    public function insertarAction()
    {
        $this->_insertar();
    }

    public function editarAction()
    {
        $this->_editar();
    }

    public function borrarAction()
    {
        $this->_borrar();
    }

    protected function _prepareValuesToForm($row)
    {

        $row['disponibilidad_rack'] = 1500;
        $row['disponibilidad'] = 500;

        if (!$row['id'])
        {
            //$row['accesos'] = $this->_add_users_all;
            $row['id_usuario'] = $this->_auth->getIdentity()->id;
        } else
        {
            if($row['id_zona']) $this->_form->getElement('ubicacion')->setAttrib('disabled',true);
            $row['accesos']=$this->_model->UserOferta->getCol('id_user',array('id_oferta=?'=>$this->_id));
 
            
            $row['f_prevista'] =  Sgit_Filter_DateDbToForm::filter($row['f_prevista']);
        }

        return $row;
    }


    protected function _prepareValuesToDb()
    {

        
        $row = $this->_form->getValues();
        
        if($this->_actionName=='insertar'){
            $row['f_apertura'] = date('Y-m-d');
        }
        
        
        $row['f_prevista'] = Sgit_Filter_DateToDb::filter($row['f_prevista']);
        

        unset($row['accesos']);
        unset($row['disponibilidad_rack']);
        
        return $row;
    }
    
    function _afterExecute()
    {
        
        $row = $this->_form->getValues();
        $accesos = $this->_creaValueAccesosToDB($row['accesos'], $row['id_usuario']);
        
        $this->_model->UserOferta->deleteRow(array('id_oferta=?'=>$this->_id));

        foreach($accesos as $v)
        {
            if(is_numeric($v))
            {
                $data['id_user']=$v;
                $data['id_oferta']=$this->_id;
                $this->_model->UserOferta->insertRow($data);
            }
        }
    }
    
    

    function _creaValueAccesosToDB($accesos, $jefe1)
    {

        if ($accesos)
        {
            if (is_array($accesos))
            {
                $permisos = $accesos;
                $permisos[] = $jefe1;
            } else
            {
                $permisos[] = $accesos;
                $permisos[] = $jefe1;
            }
        } else
        {
            $permisos[] = $jefe1;
        }

        $permisos=array_unique($permisos);
        return $permisos;
    }


    protected function _prepareValuesToTr($v)
    {
        
        $v['last_post']  = Sgit_Filter_DateDbToLocalize::filter($v['last_post'],'',$v['created_on']);
        $v['f_prevista'] = Sgit_Filter_DateDbToLocalize::filter($v['f_prevista']);
        
        $v['level']=($v['level']) ?  100*(1-($v['level']/$this->_max_level)) : 0;
        $v['zona']=($v['zona']) ?  $v['zona']:  $v['ubicacion'];
        
       
        $v['area'] =    $this->_element->OfertasAreas->getMultiOption($v['id_area_oferta']);
        $v['estado'] =  $this->_element->OfertasEstado->getMultiOption($v['estado']);
        $v['permitido'] = is_numeric($v['id_user']) || $this->_esSuperUser;
        
        $pid = 'OF' . str_pad($v['id'], 4, "0", STR_PAD_LEFT);
        $v['cliente'] = $pid . ' - ' . $v['cliente'];
        
        
        return $v;
    }


    protected function _getFila($id)
    {
        $row = $this->_model->default->GetOfertas($id);
        $row = $this->_prepareValuesToTr($row);
        return $row;
    }

    
    
    public function _afterAdd()
    {
        $this->_afterExecute();

        $row = $this->_getFila($this->_id);

        $server=$this->getRequest()->getServer('SERVER_NAME');
         
        $body = '<h1>Nueva Oferta '.$row['cliente'].'</h1>
        <b>PEP:  </b>'.$row['pep'].'<br>
        <b>Datacenter:</b>  '.Sgit_Cache::single()->model('Datacenter')->getKey($row['id_zona']).'<br>
        <b>Fecha prevista Implantación:  </b>'.$row['f_prevista'].'<br>
        <b>Responsable:</b>  '.$row['responsable'].'<br>
        <b>Racks:</b>  '.$row['racks'].'<br>
        <b>Superficie m2:</b>  '.$row['superficie'].'<br>
        <b>Potencia kW:</b>  '.$row['potencia'].'<br>
        <b>Comentarios: </b>   <br>'.$row['notas'];

        $accesos=$this->_model->UserOferta->getCol('id_user',array('id_oferta=?'=>$this->_id));
 

        $mail=new Sgit_Mail();
        $entrada['de']=$this->_auth->getIdentity()->id;
        $entrada['destinatariosCC']=$accesos;
        $entrada['asunto']='Nueva Oferta: '.$row['cliente'];
        $entrada['body']=$body;
        $entrada['ira']="http://$server/ofertas-post/index/id_oferta/".$this->_id;
        $entrada['id_zona']=$row['id_zona'];
     
        $mail->sendMsg($entrada);

    }



    public function actualizaAction()
    {

        $this->_helper->viewRenderer->setNoRender(TRUE);



        $id=$this->_getParam('id');
        $status=$this->_getParam('status');
        
        
        $post=new Application_Model_OfertasPost();
        
        if($status==1)//aceptada
        {
            
            $data['estado']='Aceptada';
            $row = $this->_model->default->updateRow($data,$id);
            $record['id_oferta']=$id;
            $record['id_usuario']=$this->_auth->getIdentity()->id;
            $record['fecha']=new Zend_Db_Expr('NOW()');
            $record['notas']='Se cierra la oferta pasa a estado Adjudicada';
            $row = $post->insertRow($record);
            
        }elseif($status==2){//Cancelada
            
            $data['estado']='Cancelada';
            $row = $this->_model->default->updateRow($data,$id);
            $record['id_oferta']=$id;
            $record['id_usuario']=$this->_auth->getIdentity()->id;
            $record['fecha']=new Zend_Db_Expr('NOW()');
            $record['notas']='Se cierra la oferta pasa a estado Cancelada';
            $row = $post->insertRow($record);
            
        }elseif($status==3){//sigue activa
            
            $record['id_oferta']=$id;
            $record['id_usuario']=$this->_auth->getIdentity()->id;
            $record['fecha']=new Zend_Db_Expr('NOW()');
            $record['notas']='Esta oferta todavía sigue activa';
            $row = $post->insertRow($record);
        }
        
        print $this->view->msg('Gracias por colaborar');
        print "<script>
        w=window;
        v=(w.self.opener=w.self);
        v.close();
        </script>";
        
        
        
    }



}
